"""
配置
"""

from pathlib import Path

import yaml

_CONFIG_PATH: Path = Path(__file__).resolve().parent / "develop.yaml"
""" 配置文件路径 """

with open(_CONFIG_PATH, "r", encoding="UTF-8") as f:
    _config: dict = yaml.load(f, Loader=yaml.FullLoader)


class _Const:
    """ 常量 配置 """

    ENCODING: str = "UTF-8"
    """ 编码格式 """


class _Format:
    """ 格式 配置 """

    DATE_FORMAT: str = "%Y-%m-%d"
    """
    日期格式

    YYYY-MM-DD
    """

    TIME_FORMAT: str = "%H:%M:%S"
    """
    时间格式

    HH:mm:ss
    """

    DATETIME_FORMAT: str = "%Y-%m-%d %H:%M:%S"
    """
    日期时间格式

    YYYY-MM-DD HH:mm:ss
    """


class _MongoDB:
    """ MongoDB 配置 """

    HOST: str = _config["DB"]["MONGODB"]["HOST"]
    """ 主机 IP 地址 """

    PORT: int = _config["DB"]["MONGODB"]["PORT"]
    """ 端口号（默认为 27017） """

    DB_NAME: str = _config["DB"]["MONGODB"]["DB_NAME"]
    """ 库名 """

    USERNAME: str = _config["DB"]["MONGODB"]["USERNAME"]
    """ 用户名 """

    PASSWORD: str = _config["DB"]["MONGODB"]["PASSWORD"]
    """ 密码 """

    REPLICA_SET: str = _config["DB"]["MONGODB"]["REPLICA_SET"]
    """ 副本集 """

    URI: str = (
        f"mongodb://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/"
        if USERNAME and PASSWORD
        else f"mongodb://{HOST}:{PORT}/"
    )
    """ MongoDB 连接 URI（不包括库） """

    URI_WITH_REPLICA_SET: str = f"{URI}?replicaSet={REPLICA_SET}"
    """ MongoDB 副本集连接 URI（不包括库） """

    URL: str = f"{URI}{DB_NAME}"
    """ MongoDB 连接 URL """


class _Nacos:  # noqa: SpellError
    """ Nacos 配置 """

    URL: str = _config["NACOS"]["URL"]
    """ URL """

    NAMESPACE: str = _config["NACOS"]["NAMESPACE"]
    """ 命名空间 """

    USERNAME: str = _config["NACOS"]["USERNAME"]
    """ 用户名 """

    PASSWORD: str = _config["NACOS"]["PASSWORD"]
    """ 密码 """

    DATA_ID: str = _config["NACOS"]["DATA_ID"]
    """ 数据项 Id """

    GROUP: str = _config["NACOS"]["GROUP"]
    """ 分组 """


class _Path:
    """ 路径 配置 """

    ROOT_DIR: str = str(Path(__file__).resolve().parent)
    """ 项目根目录 """

    ENV_FILE: str = str(Path(__file__).resolve().parent / "develop.env")
    """ 配置文件路径 """


class _Regex:
    """ 正则 配置 """

    DATE_REGEX: str = r"\b\d{4}-\d{2}-\d{2}\b"
    """
    日期 正则

    - 格式: YYYY-MM-DD
    - eg: 2024-01-30
    """

    TIME_REGEX: str = r"\b\d{2}:\d{2}:\d{2}\b"
    """
    时间 正则

    - 格式: HH:mm:ss
    - eg: 14:04:28
    """

    DATETIME_REGEX: str = r"\b\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\b"
    """
    日期时间 正则

    - 格式: YYYY-MM-DD HH:mm:ss
    - eg: 2024-01-30 14:04:28
    """


class _Security:
    """ 安全配置 """

    ALGORITHM: str = _config["SECURITY"]["ALGORITHM"]
    """ 加密算法 """

    SECRET_KEY: str = _config["SECURITY"]["SECRET_KEY"]
    """ 密钥（用于签名、加密等） """


class settings:  # noqa
    """ 项目配置 """

    CONST = _Const
    """ 常量 配置 """

    MONGODB = _MongoDB
    """ MongoDB 配置 """

    NACOS = _Nacos
    """ Nacos 配置 """

    PATH = _Path
    """ 路径 配置 """

    REGEX = _Regex
    """ 正则 配置 """

    SECURITY = _Security
    """ 安全 配置 """

    FORMAT = _Format
    """ 格式 配置 """


if __name__ == '__main__':
    from devtools import debug

    debug(settings.NACOS.__dict__)
